package LeetCode;

//给定一个字符串 s 和一个整数 k，从字符串开头算起，每计数至 2k 个字符，就反转这 2k 字符中的前 k 个字符。
//
//如果剩余字符少于 k 个，则将剩余字符全部反转。
//如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。
public class Num541 {
    public String reverseStr(String s, int k) {
        //先确定字符串长度
        int n = s.length();
        //转化数组存储，方便调用
        char[] list = s.toCharArray();
        //根据题意，可以以每2k为单位增加，确定数组中能容下多少个2k
        for (int i = 0; i < n; i = i + 2 * k) {
            //对每一个长度为2k的字符串，的前k个字符进行反转
            reverse(list, i, Math.min(i + k, n) - 1);
        }
        return new String(list);
    }
    //自定义一个反转方法
    private void reverse(char[] list, int left, int right) {
        while (left < right) {
            char temp = list[left];
            list[left] = list[right];
            list[right] = temp;
            left++;
            right--;
        }
    }
}
